﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DbFrame.Core.Interface
{

    //
    using DbFrame.BaseClass;
    using System.Linq.Expressions;

    //
    public interface IQueryJoin<T1, T2> : IQueryBase<T1, T2>
    {
        IQueryJoin<T1, T2, TJoin> Join<TJoin>(Expression<Func<T1, T2, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3> : IQueryBase<T1, T2, T3>
    {
        IQueryJoin<T1, T2, T3, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4> : IQueryBase<T1, T2, T3, T4>
    {
        IQueryJoin<T1, T2, T3, T4, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, T4, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4, T5> : IQueryBase<T1, T2, T3, T4, T5>
    {
        IQueryJoin<T1, T2, T3, T4, T5, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, T4, T5, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4, T5, T6> : IQueryBase<T1, T2, T3, T4, T5, T6>
    {
        IQueryJoin<T1, T2, T3, T4, T5, T6, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, T4, T5, T6, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4, T5, T6, T7> : IQueryBase<T1, T2, T3, T4, T5, T6, T7>
    {
        IQueryJoin<T1, T2, T3, T4, T5, T6, T7, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8> : IQueryBase<T1, T2, T3, T4, T5, T6, T7, T8>
    {
        IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9> : IQueryBase<T1, T2, T3, T4, T5, T6, T7, T8, T9>
    {
        IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> : IQueryBase<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
    {
        IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> : IQueryBase<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>
    {
        IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> : IQueryBase<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>
    {
        IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> : IQueryBase<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>
    {
        IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> : IQueryBase<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>
    {
        IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> : IQueryBase<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>
    {
        IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TJoin> Join<TJoin>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TJoin, bool>> ON, EJoinType _EJoinType = EJoinType.LEFT_JOIN);
    }
    public interface IQueryJoin<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> : IQueryBase<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>
    {
    }



}

